import axios from 'axios'
axios.create({
    timeout: 5000,
})
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    let token = localStorage.getItem('token')
    if (token) {
        config.headers.Authorization = 'Bearer ' + token
    }
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
axios.interceptors.response.use(
    (response) => response,
    async (error) => {
        const { config, response } = error;
        if (response?.status === 401 && !config.__isRetryRequest) {
            config.__isRetryRequest = true;
            try {
                const refreshToken = localStorage.getItem('refreshToken');
                const { data } = await axios.post('/auth/refresh-token', { refreshToken });
                localStorage.setItem('accessToken', data.accessToken);
                axios.defaults.headers.Authorization = `Bearer ${data.accessToken}`;
                return axios(config); // 重试原始请求
            } catch (refreshError) {
                if (error.message.includes('timeout')) {
                    alert('请求超时')
                    let code = error.response.status;
                    switch (code) {
                        case 400:
                            console.log('错误请求')
                            break;
                        case 401:
                            console.log('未授权')
                            break;
                        case 403:
                            console.log('禁止访问')
                            break;
                        case 404:
                            console.log('页面飞走了');
                            break;
                        case 500:
                            console.log('服务器错误');
                            break;
                        case 502:
                            console.log('网关错误');
                            break;
                        default:
                            break;
                    }
                }
                // 处理刷新令牌失败的情况，例如重定向到登录页面
                console.error('Refresh token failed', refreshError);
            }
        }
        return Promise.reject(error);
    }
);


// 请求拦截器：在发送请求之前，检查本地存储中的 accessToken，如果存在，则将其添加到请求头中。
// 响应拦截器：
// 检查响应状态是否为 401（未授权）。
// 使用一个标记 __isRetryRequest 防止同一个请求被重复重试。
// 发送一个请求以刷新 token。
// 如果刷新成功，更新本地存储中的 accessToken，并设置 Axios 实例的默认 Authorization 头。
// 使用 instance(config) 重试原始请求。
// 错误处理：如果刷新失败，可以处理错误，例如重定向到登录页面。



export default axios